package com.zdw.demo.vo;


import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.*;

import java.io.Serializable;

/**
 * 微信订单查询 实体
 */
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class WechatQueryOrder implements Serializable {

    /**
     * 应用ID
     */
    @JsonIgnore
    ////private String appid;

    /**
     * 直连商户号
     */
    ///@JsonIgnore
    //private String mchid;

    /**
     * 商户订单号:内部订单号,允许数字、大小写字母_-*且在同一个商户号下唯一
     */
    private String out_trade_no;

    /**
     * 微信支付订单号
     */
    private String transaction_id;

    /**
     * 交易类型
     * <p>
     * 枚举值：
     * JSAPI：公众号支付
     * NATIVE：扫码支付
     * APP：APP支付
     * MICROPAY：付款码支付
     * MWEB：H5支付
     * FACEPAY：刷脸支付
     */
    private String trade_type;

    /**
     * 交易状态
     * <p>
     * 枚举值：
     * SUCCESS：支付成功
     * REFUND：转入退款
     * NOTPAY：未支付
     * CLOSED：已关闭
     * REVOKED：已撤销（仅付款码支付会返回）
     * USERPAYING：用户支付中（仅付款码支付会返回）
     * PAYERROR：支付失败（仅付款码支付会返回）
     */
    private String trade_state;

    /**
     * 交易状态描述
     */
    private String trade_state_desc;

    /**
     * 付款银行
     */
    private String bank_type;

    /**
     * 附加数据
     */
    private String attach;

    /**
     * 支付完成时间
     */
    private String success_time;

    /**
     * 支付者信息
     */
    private WechatPayer payer;

    /**
     * 订单金额信息
     */
    private WechatAmount amount;

    // 优惠功能

    // 场景信息

    // 结算信息


    // 构造器
    public WechatQueryOrder(String openid, double total) {
        this.payer = new WechatPayer(openid);
        this.amount = new WechatAmount(total);
    }


    /**
     * 微信下单金额 实体
     */
    @Data
    public class WechatPayer implements Serializable {

        // 用户标识(用户在直连商户appid下的唯一标识)
        private String openid;

        public WechatPayer(String openid) {
            this.openid = openid;
        }

    }

    /**
     * 微信下单金额 实体
     */
    @Data
    public class WechatAmount implements Serializable {

        // 总金额
        private double total;

        // 货币类型(仅支持人民币CNY)
        private String currency;

        public WechatAmount(double total) {
            this.total = total;
        }

    }


}
